
#pragma once

#include "ParaMath.h"
#include "DataFormat.h"

namespace FlameEngine
{
	enum VertexElementClassification
	{
		vc_perVertex,
		vc_perInstance,
	};

	enum VertexInterpretMethod
	{
		vi_default,
		vi_partialU,
		vi_partialV,
		vi_crossUV,
		vi_UV,
		vi_lookup,
		vi_lookuperSampled,
	};

	class VertexElement
	{
	public:
		uint32_t GetID();
		void GetSemanticName();
		uint8_t GetSemanticIndex();
		DataFormat GetFormat();
		uint32_t GetOffset();
		uint8_t GetStreamSlotIndex();
		VertexElementClassification GetClassification();
		VertexInterpretMethod GetInterpretMethod();
		uint32_t GetInstanceStepRate();
	};

	class VertexLayout
	{
	public:
		uint32_t GetID();
		uint8_t GetVertexElementCount();
	};
}